package com.qiandao.xuexitong.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qiandao.xuexitong.dto.*;
import com.qiandao.xuexitong.entity.AttendanceTask;

import java.util.List;

/**
 * <p>
 * 签到任务信息表 服务类
 * </p>
 *
 * @author YouJiao
 * @since 2025-04-11
 */
public interface AttendanceTaskService extends IService<AttendanceTask> {
    
    /**
     * 更新过期任务状态
     */
    void updateExpiredTasks();
    
    /**
     * 创建二维码签到任务
     */
    QrCodeInfoDTO createQrCodeAttendanceTask(Long teacherId, CreateQrCodeAttendanceTaskDTO dto);
    
    /**
     * 二维码签到
     */
    void qrCodeSignIn(Long studentId, QrCodeSignInDTO dto);
    
    /**
     * 创建手势签到任务
     */
    void createGestureAttendanceTask(Long teacherId, CreateGestureAttendanceTaskDTO dto);
    
    /**
     * 手势签到
     */
    void gestureSignIn(Long studentId, GestureSignInDTO dto);
    
    /**
     * 创建位置签到任务
     */
    void createLocationAttendanceTask(Long teacherId, CreateLocationAttendanceTaskDTO dto);
    
    /**
     * 位置签到
     */
    void locationSignIn(Long studentId, LocationSignInDTO dto);
    
    /**
     * 创建签到码签到任务
     */
    void createCodeAttendanceTask(Long teacherId, CreateCodeAttendanceTaskDTO dto);
    
    /**
     * 签到码签到
     */
    void codeSignIn(Long studentId, CodeSignInDTO dto);
    
    /**
     * 创建一键签到任务
     */
    void createQuickAttendanceTask(Long teacherId, CreateQuickAttendanceTaskDTO dto);
    
    /**
     * 一键签到
     */
    void quickSignIn(Long studentId, QuickSignInDTO dto);
    
    /**
     * 查询教师签到任务列表
     * @param teacherId 教师ID
     * @param page 分页参数
     * @return 签到任务列表
     */
    IPage<AttendanceTaskListDTO> getTeacherAttendanceTasks(Long teacherId, Page<AttendanceTask> page);

    /**
     * 获取签到任务详情
     * @param taskId 签到任务ID
     * @return 签到详情
     */
    AttendanceDetailDTO getAttendanceDetail(Long taskId);

    /**
     * 修改学生签到状态
     * @param teacherId 教师ID
     * @param dto 修改参数
     */
    void updateAttendanceStatus(Long teacherId, UpdateAttendanceStatusDTO dto);

    /**
     * 导出签到详情Excel
     * @param taskId 签到任务ID
     * @return Excel文件字节数组
     */
    byte[] exportAttendanceDetail(Long taskId);

    /**
     * 学生查询签到任务列表
     * @param studentId 学生ID
     * @return 签到任务列表
     */
    List<StudentAttendanceTaskDTO> getStudentAttendanceTasks(Long studentId);
} 